package com.xiangge.method;

import java.util.Arrays;

/*
        有参有返回值方法
            定义格式：
            public static 返回值类型 方法名(形式参数列表){
                          方法体;
                          return 值;
            }
*/
// 有参有返回值方法
public class MethodDemo4 {
    public static void main(String[] args) {
        int[] arr = {5, 12, 90, 18, 77, 76, 45, 28, 59, 72};
        // 调用delectArrayMax方法
        int[] arrNew = delectArrayMax(arr);
        if (arrNew == null){
            System.err.println("传入数据错误");
        }else {
            for (int yuanSu : arrNew) {
                System.out.print(yuanSu + "\t");
            }
        }

        System.out.println();
        System.out.println("*************************");

        // 调用delectArrayTwo方法
        int[] arrNew1 = delectArrayTwo(arr);
        if (arrNew1 == null){
            System.err.println("传入数据错误");
        }else {
            for (int yuanSu1 : arrNew1) {
                System.out.print(yuanSu1 + "\t");
            }
        }

        System.out.println();
        System.out.println("*************************");

        // 调用getAll方法
        int[] arrNew2 = getAll(arr);
        if (arrNew2 == null){
            System.err.println("传入数据错误");
        }else {
            for (int yuanSu2 : arrNew2) {
                System.out.print(yuanSu2 + "\t");
            }
        }
    }
    // 删除数组arr={5, 12, 90, 18, 77, 76, 45, 28, 59, 72},索引为2位置的元素
    // 定义一个有参有返回值的方法,数组类型的返回值是int[], 形参就是int[] arr
    public static int[] delectArrayTwo(int[] arr){
        // 当数组arr=null 或者 arr.length=0-->arr={},提示数组有问题
        if (arr == null || arr.length == 0){
            System.err.println("数组错误");
            // 返回null，说明数组有问题
            return null;
        }
        // 定义一个临时变量，来代表索引
        int index = 2;
        // 创建一个新数组，数组的长度为arr.length-1
        // 将arr中索引index[0,1]位置平移到新数组中，arr[3,arr.length-1]位置移到新数组的[index,arr.length-2]
        int[] newArr = new int[arr.length-1];
        for (int i = 0; i < index; i++) {
            newArr[i] = arr[i];
        }
        for (int i = index; i < newArr.length; i++) {
            newArr[i] = arr[i+1];
        }
        // 使用Arrays工具查看新数组
        System.out.println(Arrays.toString(newArr));
        // 返回新数组
        return newArr;
    }

    // 删除数组arr={5, 12, 90, 18, 77, 76, 45, 28, 59, 72}最大值
    // 定义一个有参有返回值的方法,数组类型的返回值是int[], 形参就是int[] arr
    public static int[] delectArrayMax(int[] arr){
        // 当数组arr=null 或者 arr.length=0-->arr={},提示数组有问题
        if (arr == null || arr.length == 0){
            System.err.println("数组错误");
            // 返回null，说明数组有问题
            return null;
        }
        // 定义临时变量，假设最大值max为数组的第一个元素，索引为0
        int max = arr[0];
        int maxIndex = 0;
        // for循环进行遍历数组比较
        // 因为已经将第一个元素赋值给max了，所以只需要从第二个元素，即索引1开始比较
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]){
                // 如果满足条件，替换max值和maxIndex索引
                max = arr[i];
                maxIndex = i;
            }
        }
        // 创建一个新数组，因为删除了一个元素，所以新数组的长度为arr.length-1，将删除后的元素放入
        int[] arrNew = new int[arr.length-1];
        // 将arr数组中的[0,index-1]位置直接平移到新数组arrNew的同样位置
        // 将arr数组中的[index+1,arr.length-1]位置平移到新数组arrNew[index,arrNew.length-1]
        for (int i = 0; i < maxIndex; i++) {
            arrNew[i] = arr[i];
        }
        for (int i = maxIndex; i < arrNew.length; i++) {
            arrNew[i] = arr[i+1];
        }
        // 使用Arrays工具查看新数组
        System.out.println(Arrays.toString(arrNew));
        // 返回新数组
        return arrNew;
    }

    // 求出数组：{5, 12, 90, 18, 77, 76, 45, 28, 59, 72}的最大值，最小值，元素和，平均值存入新数组
    // 定义一个有参有返回值的方法,数组类型的返回值是int[], 形参就是int[] arr
    public static int[] getAll(int[] arr){
        // 当数组arr=null 或者 arr.length=0-->arr={},提示数组有问题
        if (arr == null || arr.length == 0){
            System.err.println("数组错误");
            // 返回null，说明数组有问题
            return null;
        }
        // 定义int类型和double类型的变量
        int sum = 0;
        double avg = 0;
        // 最大、最小值使用假设方法，假设最值是数组中元素的第一位
        int max = arr[0],min = arr[0];
        // 遍历数组，以求得最大值，最小值，元素和，平均值
        for (int i = 0; i < arr.length; i++) {
            // 累加求和
            sum += arr[i];
            // 使用if循环结构判断最值
            if (max < arr[i]){
                max = arr[i];
            }
            if (min > arr[i]){
                min = arr[i];
            }
        }
        // 元素的平均值
        avg = sum / arr.length;
        // 创建一个长度为4的新数组，用来装原数组的最大值，最小值，元素和，平均值
        int[] newArr = new int[4];
        newArr[0] = max;
        newArr[1] = min;
        newArr[2] = sum;
        newArr[3] = (int) avg;
        // 使用Arrays工具查看新数组
        System.out.println(Arrays.toString(newArr));
        // 返回新数组
        return newArr;
    }
}
